<?php 
class Arm_Form extends Zend_Form
{
    
    /**
     * Системное поле добавляемое в каждую форму CSRF form protection
     * @var string
     */
    const FIELD_ARM_HASH = 'arm_hash';
    
    /**
     * Префикс классов декораторов.
     * 
     * @var string
     */
    private $_armClassDecorators = 'Arm_Form_Decorator';
    
    /**
     * Путь к декораторм по умолчанию.
     * 
     * @var string
     */
    private $_armPathDecorators = 'Arm/Form/Decorator'; 
    
    /**
     * Конструктор.
     *  
     * @param Zend_Config|array|null $options
     */
    public function __construct($options = null) 
    {
       if (is_array($options)) {
            $this->setOptions($options);
        } elseif ($options instanceof Zend_Config) {
            $this->setConfig($options);
        }

        // Extensions...
        $this->armInit();
        $this->init();

        $this->loadDefaultDecorators();
    }
    
    /**
     * Иницилизация настроект формы по умолчанию.
     * 
     * @return void
     */
    public function armInit()
    {
       $this->addElementPrefixPaths(array(
            'decorator' => array($this->_armClassDecorators => $this->_armPathDecorators),
        ));
        $hash = new Zend_Form_Element_Hash(self::FIELD_ARM_HASH);
        $hash->setTimeout(3600);
        $hash->setAutoInsertNotEmptyValidator(false);
        $hash->setIgnore(true);
        $this->addElement($hash);
    }
    
    /**
     * Обьект с набором полей форм.
     * 
     * @return Arm_Form_Fields
     */
    public function getFields()
    {
        if(Zend_Registry::isRegistered('Arm_Form_Fields')) {
            return Zend_Registry::get('Arm_Form_Fields');
        }
        $fields = new Admin_Form_Fields();
        Zend_Registry::set('Arm_Form_Fields', $fields);
        return $fields;
    }
    
    /**
     * Удаления поля, arm_hash, по умолчанию данное поле добавляется
     * в каждую форму.
     * 
     * @return void
     */
    public function removeElementArmHash()
    {
        $this->removeElement(self::FIELD_ARM_HASH);
    }
}